package 纯编程题配套习题;

import org.junit.Assert;

/**
 * 给你一个字符串 s，由若干单词组成，单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
 * 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
 *
 * 示例 1：
 * 输入：s = "Hello World"
 * 输出：5
 *
 * 示例 2：
 * 输入：s = "   fly me   to   the moon  "
 * 输出：4
 *
 * 示例 3：
 * 输入：s = "luffy is still joyboy"
 * 输出：6
 *
 * 提示：
 * 1 <= s.length <= 104
 * s 仅有英文字母和空格 ' ' 组成
 * s 中至少存在一个单词
 *
 * 链接：https://leetcode-cn.com/problems/length-of-last-word
 */
public class _58_最后一个单词的长度 {
    public static void main(String[] args) {
        Assert.assertEquals(5, lengthOfLastWord("Hello World"));
        Assert.assertEquals(4, lengthOfLastWord("   fly me   to   the moon  "));
        Assert.assertEquals(6, lengthOfLastWord("luffy is still joyboy"));
    }

    /**
     * 解题思路:
     * 1、将字符串转成字符数组
     * 2、遍历字符数组，从后面往前遍历，用变量x记录遍历字符得长度
     */
    public static int lengthOfLastWord(String s) {
        char[] charArray = s.toCharArray();
        int lastWordLength = 0;
        for (int i = charArray.length - 1; i >= 0; i--) {
            if (charArray[i] != ' ') {
                lastWordLength++;
                continue;
            }
            if (charArray[i] == ' ' && lastWordLength == 0) {
                continue;
            }
            break;
        }
        return lastWordLength;
    }
}
